package com.webserver.servlet;

import com.webserver.http.HttpRequest;
import com.webserver.http.HttpResponse;
import com.webserver.vo.User;

import java.io.*;

/**
 * 用于处理用户注册业务的类
 */
public class RegServlet {
    public void service(HttpRequest request, HttpResponse response){
        System.out.println("RegServlet:开始处理注册");
        //1通过request获取注册页面上表单提交上来的注册信息
        //2将该用户信息保存到硬盘(序列化到一个文件中)
        //3设置response响应注册结果页面
        /*
            获取reg.html页面表单输入框数据时,getParameter方法参数要与
            该输入框name属性指定的名字完全一致!
         */
        String name = request.getParameter("usename");
        String password = request.getParameter("passeord");
        String nickname = request.getParameter("nickname");
        String age = request.getParameter("age");
        System.out.println(name+","+password+","+nickname+","+age);
        /*
            首先要验证用户输入的注册信息
            要求如下:
            四项内容都必须写,不能有null的情况
            并且年龄必须是一个整数(正则表达式验证)

            否则直接响应注册失败提示界面:reg_info_error.html
            该页面居中显示一行字:注册失败,注册信息有误!请重新注册.
         */
        if (name==null || password==null || nickname==null || age==null
                || !age.matches("[0-9]+")){
            File file = new File("./webapps/myweb/reg_info_error.html");
            response.setEntity(file);
            return;
        }
        int age1 = Integer.parseInt(age);
        /*
            重复用户的验证,如果是重复用户则直接响应重复用户的提示界面:
            have_user.html.中显示一行字:该用户已存在,请重新注册.
         */
        File file = new File("./users/"+name+".obj");
        if (file.exists()){
            file = new File("./webapps/myweb/have_user.html");
            response.setEntity(file);
            return;
        }
//        if (file.isDirectory()){
//            File[] subs = file.listFiles((File pathname) ->
//                     pathname.getName().endsWith(".obj")
//            );
//            for (int i=0;i< subs.length;i++){
//                if (name.equals(subs[i].getName())){
//                    file = new File("./webapps/myweb/have_user.html");
//                    response.setEntity(file);
//                    return;
//                }
//            }
//        }

        /*
            2 将该用户以User对象形式序列化到文件中.
              文件名格式:用户名.obj
         */
        try (
                ObjectOutputStream oos = new ObjectOutputStream(
                        new FileOutputStream(
                                file
                        )
                )
                ){
            User user = new User(name,password,nickname,age1);
            oos.writeObject(user);
            //3
            file = new File("./webapps/myweb/reg_success.html");
            response.setEntity(file);
        }catch (IOException e){
            e.printStackTrace();
        }
        System.out.println("RegServlet:处理注册完毕");
    }
}
